package com.anti.modular.sys.menu.service;

import com.anti.commom.pojo.node.LoginMenuTreeNode;
import com.anti.modular.sys.menu.entity.SysMenu;
import com.anti.modular.sys.menu.node.MenuBaseTreeNode;
import com.anti.modular.sys.menu.param.SysMenuParam;

import java.util.List;

/**
 * @Description TODO
 * @Author anTi
 * @Date 2021-2-26
 */
public interface SysMenuService {

    /**
     * 添加系统菜单
     * @param sysMenuParam 添加参数
     */
    void add(SysMenuParam sysMenuParam);

    void delete(SysMenuParam sysMenuParam);


    void edit(SysMenuParam sysMenuParam);

    /**
     * 系统菜单列表（树表）
     * @param sysMenuParam 查询参数
     * @return 菜单树表列表
     */
    List<SysMenu> list(SysMenuParam sysMenuParam);
    /**
     * 获取用户权限相关信息
     * @param userId 用户id
     * @return 权限集合
     */
    List<String> getLoginPermissions(Long userId);

    /**
     * 获取用户菜单相关信息，前端使用
     *
     * @param userId  用户id
     * @param appCode 应用编码
     * @return 菜单信息结果集
     */
    List<LoginMenuTreeNode> getLoginMenus(Long userId, String appCode);

    /**
     * 获取系统菜单树，用于新增，编辑时选择上级节点
     * @param sysMenuParam 查询参数
     * @return 菜单树列表
     */
    List<MenuBaseTreeNode> tree(SysMenuParam sysMenuParam);


    /**
     * 获取系统菜单树，用于给角色授权时选择
     * @param sysMenuParam 查询参数
     * @return 菜单树列表
     */
    List<MenuBaseTreeNode> treeForGrant(SysMenuParam sysMenuParam);
}
